package com.itheima.leetcode.od.b.dynamicprogramming;

import java.math.BigInteger;
import java.util.Arrays;

/**
 * (C卷,200分)- 抢7游戏（Java & JS & Python & C）
 * <p>
 * 题目描述
 * <p>
 * A、B两个人玩抢7游戏，游戏规则为：
 * <p>
 * A先报一个起始数字 X（10 ≤ 起始数字 ≤ 10000），B报下一个数字 Y （X - Y < 3），A再报一个数字 Z（Y - Z < 3），以此类推，直到其中一个抢到7，抢到7即为胜者；
 * <p>
 * 在B赢得比赛的情况下，一共有多少种组合？
 * <p>
 * 输入描述
 * <p>
 * 起始数字 M
 * <p>
 * 10 ≤ M ≤ 10000
 * 如：
 * <p>
 * 100
 * <p>
 * 输出描述
 * <p>
 * B能赢得比赛的组合次数
 * <p>
 * 用例
 * <p>
 * 输入	10
 * 输出	1
 * 说明	无
 */
public class Grab7Games {
    public static void main(String[] args) {
        /*Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        System.out.println(countBWins(num));
        scanner.close();*/

        int num = 10;
        System.out.println(countBWins(num));
    }

    public static BigInteger countBWins(int m) {
        BigInteger[][] dpm = new BigInteger[2][10001]; // 0 1 代表 分别以A B为起点时候, i 代表最后 B 抢七的count
        Arrays.stream(dpm).forEach(ints -> Arrays.fill(ints, BigInteger.ZERO));

        dpm[0][8] = BigInteger.valueOf(1);
        dpm[0][9] = BigInteger.valueOf(1);
        dpm[1][7] = BigInteger.valueOf(1);
        dpm[1][9] = BigInteger.valueOf(1);
        for (int i = 10; i <= m; i++) {
            dpm[0][i] = dpm[1][i - 1].add(dpm[1][i - 2]);
            dpm[1][i] = dpm[0][i - 1].add(dpm[0][i - 2]);
        }

        return dpm[0][m];
    }
}